package com.angle.im.server.service;

import com.angle.im.server.config.mq.OnsComponent;
import com.angle.im.server.config.mq.domain.SendToListMqBody;
import com.angle.im.server.config.mq.domain.SendToOneMqBody;
import com.angle.im.server.domain.constants.MqTags;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author zhangwei
 * @date 2019/4/18 11:43
 * @desc 消息业务层
 */
@Service
public class MessageService {

    @Autowired
    private OnsComponent onsComponent;


    /**
     * 对指定用户发送消息
     *
     * @param platform 平台
     * @param from     消息发送方用户id
     * @param to       消息接收方用户id
     * @param msg      消息
     * @param save     是否保存
     * @return
     */
    public boolean sendOne(String platform, String from, String to, String msg, boolean save) {
        /*
         * 1 发送广播消息
         * 2 监听广播
         *      0 判断用户是否是本机的链接用户
         *      1 获取目标用户session
         *      2 发送消息
         *      3 保存消息
         */
        onsComponent.sendToOne(MqTags.SEND_TO_ONE, new SendToOneMqBody(platform, from, to, msg, save));
        return true;
    }

    /**
     * 对用户列表发送消息
     *
     * @param platform 平台
     * @param from     消息发送方用户id
     * @param toList   消息接收方用户id列表
     * @param msg      消息
     * @param save     是否保存
     * @return
     */
    public boolean sendList(String platform, String from, List<String> toList, String msg, boolean save) {
        /*
         * 1 发送广播消息
         * 2 监听广播
         *      0 判断用户是否是本机的链接用户
         *          如果是,则发消息
         *          如果不是,则continue,不返回
         *      1 获取目标用户session
         *      2 发送消息
         *      3 保存消息
         */
        onsComponent.sendToList(MqTags.SEND_TO_LIST, new SendToListMqBody(platform, from, toList, msg, save));
        return true;
    }

}
